$(function () {
    layui.config({
        base: './../../../static/lib/dist/'
    });

    layui.use([ 'laydate', 'form', 'notice', 'table', 'selectPlus'],function () {
        var form = layui.form;
        var notice = layui.notice;
        var table = layui.table;
        var laydate = layui.laydate;
        var selectPlus = layui.selectPlus;

        //查询项目列表
        searchAll().then(value => {
            if(value.code == 200){
                value.data.forEach(pi=>{
                    $('#pro').append('<option value="'+pi.proMark+'">'+pi.proName+'</option>')
                })
                form.render(); //更新全部
            }else{
                notice.error('获取项目信息失败，'+value.msg)
            }
        }).catch(reason => {
            notice.error('获取项目信息失败，服务器未连接')
        })

        //查询机构列表
        getChildAgencys().then(value => {
            if(value.code == 200){
                value.data.forEach(pi=>{
                    $('#agency').append('<option value="'+pi.agencyCode+'">'+pi.agencyName+'</option>')
                })
                form.render(); //更新全部
            }else{
                notice.error('获取机构信息失败，'+value.msg)
            }
        }).catch(reason => {
            notice.error('获取机构信息失败，服务器未连接')
        })


        //项目选择触发
        form.on('select(profilter)', function(data){
            if(data.value == ''){
                $('#menulist').html('')
                form.render(); //更新全部
            }else{
                searchMenusOfPro(data.value)
            }
            $("input[id^=menu]").prop("checked", false)
            $("input[id^=func]").prop("checked", false)
            form.render(); //更新全部
        });
        //机构选择触发
        form.on('select(agencyfilter)', function(data){
            if(data.value == ''){
                $('#group').empty()
                $('#group').append('<option value="">请选择部门</option>')
                $("input[id^=menu]").prop("checked", false)
                $("input[id^=func]").prop("checked", false)
                form.render(); //更新全部
            }else{
                searchGroupOfAgency(data.value).then(value => {
                    if(value.code == 200){
                        $('#group').empty()
                        $('#group').append('<option value="">请选择部门</option>')
                        value.data.forEach(ul=>{
                            $('#group').append('<option value="'+ul.groupId+'">'+ul.groupName+'</option>')
                        })
                        $("input[id^=menu]").prop("checked", false)
                        $("input[id^=func]").prop("checked", false)
                        form.render(); //更新全部
                    }else{
                        notice.error('获取机构用户信息失败，'+value.msg)
                        $('#group').empty()
                        $('#group').append('<option value="">请选择部门</option>')
                        $("input[id^=menu]").prop("checked", false)
                        $("input[id^=func]").prop("checked", false)
                        form.render(); //更新全部
                    }
                }).catch(reason => {
                    notice.error('获取机构用户信息失败，服务器未连接')
                    $('#group').empty()
                    $('#group').append('<option value="">请选择部门</option>')
                    $("input[id^=menu]").prop("checked", false)
                    $("input[id^=func]").prop("checked", false)
                    form.render(); //更新全部
                })
            }
        });

        //部门选择触发
        form.on('select(groupfilter)', function(data){
            if(data.value == ''){
                $('#role').empty()
                $('#role').append('<option value="">请选择职务</option>')
                $("input[id^=menu]").prop("checked", false)
                $("input[id^=func]").prop("checked", false)
                form.render(); //更新全部
            }else{
                searchRolesOfGroup(data.value).then(value => {
                    if(value.code == 200){
                        $('#role').empty()
                        $('#role').append('<option value="">请选择职务</option>')
                        value.data.forEach(ul=>{
                            $('#role').append('<option value="'+ul.id+'">'+ul.roleName+'</option>')
                        })
                        $("input[id^=menu]").prop("checked", false)
                        $("input[id^=func]").prop("checked", false)
                        form.render(); //更新全部
                    }else{
                        notice.error('获取机构用户信息失败，'+value.msg)
                        $('#role').empty()
                        $('#role').append('<option value="">请选择职务</option>')
                        $("input[id^=menu]").prop("checked", false)
                        $("input[id^=func]").prop("checked", false)
                        form.render(); //更新全部
                    }
                }).catch(reason => {
                    notice.error('获取机构用户信息失败，服务器未连接')
                    $('#role').empty()
                    $('#role').append('<option value="">请选择职务</option>')
                    $("input[id^=menu]").prop("checked", false)
                    $("input[id^=func]").prop("checked", false)
                    form.render(); //更新全部
                })
            }
        });

        //部门选择触发
        form.on('select(rolefilter)', function(data){
            $("input[id^=menu]").prop("checked", false)
            $("input[id^=func]").prop("checked", false)
            form.render(); //更新全部
        });
        //查询触发
        form.on('submit(search)', function (data) {
            let roleId = $('#role').val()
            if(roleId == ''){
                notice.warning('请选择职务')
                return false
            }
            let groupId = $('#group').val()
            if(groupId == ''){
                notice.warning('请选择部门')
                return false
            }
            let promark = $('#pro').val()
            if(promark == ''){
                notice.warning('请选择项目')
                return false
            }
            searchRoleAutho(groupId,roleId, promark).then(value => {
                if(value.code == 200){
                    if(value.data != null){
                        value.data.forEach(mf=>{
                            $('#menu'+mf.menuId).prop("checked", true);
                            if(mf.funcInfos != null){
                                mf.funcInfos.forEach(ff=>{
                                    $('#func'+mf.menuId+'-'+ff.funcId).prop("checked", true);
                                })
                            }
                        })
                        form.render();
                    }
                }else{
                    notice.error('获取机构用户权限失败，'+value.msg)
                }
            }).catch(reason => {
                notice.error('获取机构用户权限失败，服务器未连接')
            })
        })

        //获取全部项目信息
        function searchMenusOfPro(proMark) {
            searchMenus(proMark).then(value => {
                if(value.code == 200){
                    let html_str = assemb(value.data)
                    //      console.log(html_str);
                    $('#menulist').html(html_str)
                    form.render(); //更新全部
                }else{
                    notice.error('获取菜单信息失败，'+value.msg)
                }
            }).catch(reason => {
                notice.error('获取菜单信息失败，服务器未连接')
            })
        }



        function assemb(menus) {
            let html_str = ''
            menus.forEach(menuinfo=>{
                let tr_str = '<tr>'
                tr_str += '<td>'
                tr_str += '<input type="checkbox" name="menu[]" lay-skin="primary" id="menu'+menuinfo.id+'" lay-filter="father" title="'+menuinfo.menuName+'">'
                tr_str += '</td>'
                tr_str += '<td>'
                if(menuinfo.funcList!=null && menuinfo.funcList.length>0){

                    tr_str += '<div class="layui-input-block">'
                    menuinfo.funcList.forEach(mf=>{
                        tr_str += '<input name="id[]" lay-skin="primary" id="func'+menuinfo.id+'-'+mf.id+'" type="checkbox" lay-filter="child"  value="'+mf.id+'" title="'+mf.funcName+'"> '
                    })
                    tr_str += '</div>'

                }
                tr_str += '</td>'
                tr_str += '</tr>'
                html_str += tr_str
            })
            return html_str
        }





        form.on('checkbox(child)', function(data){
            if(data.elem.checked){
                let el_id = data.elem.id
                let em_id = el_id.split('-')[0].replace('func', '')
                $('#menu'+em_id).prop("checked", true);
                form.render();
            }
        });

        form.on('checkbox(father)', function(data){

            if(data.elem.checked){
                $(data.elem).parent().siblings('td').find('input').prop("checked", true);
                form.render();
            }else{
                $(data.elem).parent().siblings('td').find('input').prop("checked", false);
                form.render();
            }
        });

        function getChecked() {
            let check_mf= []
            let menus = $("input[id^=menu]")
            for(let i =0;i<menus.length;i++){
                let me = menus[i]
                if($(me).prop("checked")){
                    let mid = $(me).attr('id').replace('menu', '')
                    let mi = {
                        menuId: mid,
                    }
                    let funcs = $("input[id^=func"+mid+"]")
                    let finfo = []
                    for(let j=0; j<funcs.length;j++){
                        let func = funcs[j]
                        if(!$(func).prop("checked")){
                            continue;
                        }
                        let fid = $(func).attr('id').replace('func'+mid+'-', '')
                        let ff = {
                            funcId: fid
                        }
                        finfo.push(ff)
                    }
                    mi.funcInfos = finfo
                    check_mf.push(mi)
                }
            }
            return check_mf
        }

        //监听提交
        form.on('submit(save)', function(data){
            let roleId = $('#role').val()
            if(roleId == ''){
                notice.warning('请选择职务')
                return false
            }
            let groupId = $('#group').val()
            if(groupId == ''){
                notice.warning('请选择部门')
                return false
            }
            let promark = $('#pro').val()
            if(promark == ''){
                notice.warning('请选择项目')
                return false
            }
            let auinfo = getChecked()

            assignRU(groupId, roleId,promark, auinfo).then(value => {
                if(value.code == 200){
                    layer.msg('保存成功', {icon: 6});
                }else{
                    notice.error('保存失败，'+value.msg)
                }
            }).catch(reason => {
                notice.error('保存失败， 服务器未连接')
            })
            return false;
        });
    })
})